var SPSdk = (function () {
    var PAY_URL = "http://www.189h5.com/Main/189pay.php";
    function SPSdk() {
        this.appId = "";
        this.appKey = "";
        this.token = "";
        this.queryParams = {};
    }
    var __proto = SPSdk.prototype;
    __proto.login = function (param, callback) {
        var m_this = this;
        console.log("成都益游登录：" + JSON.stringify(param));
        if( !m_this.access_token||!m_this.queryParams.userid){
            window.location.href='http://www.189h5.com/Main/189login.php?channelid='+m_this.queryParams.channelid+"&gameid="+m_this.appkey;
            return;
        }
        callback && callback({"result":0,"spuid":m_this.queryParams.userid,"nickname":decodeURIComponent(m_this.queryParams.uname),"access_token":m_this.access_token,"channelid":m_this.queryParams.channelid});
    }
    __proto.pay = function (param, callback) {
        var m_this = this;
        console.log("成都益游支付：" + JSON.stringify(param));
        var time=new Date();
        var now=time.getTime();
        var fees=parseFloat(param.data.amount/100).toFixed(2);
        var subjects=encodeURIComponent(param.data.goodsName);
        var signKey = "appid"+m_this.appId+"fee"+fees+"game_orderno"+param.data.orderId+"gameid"+m_this.appKey+"ord_times"+now+"subject"+subjects+"userid"+m_this.queryParams.userid+m_this.payKey;
        var signs=signKey.toLowerCase();
        var sign = hex_sha1(signs);
        var callUrl = PAY_URL+"?access_token="+m_this.queryParams.access_token+"&appid="+m_this.appId+"&fee="+fees+"&game_orderno="+param.data.orderId+"&gameid="+m_this.appKey+"&ord_times="+now+"&subject="+subjects+"&userid="+m_this.queryParams.userid+"&expand="+param.data.orderId+"&sig="+sign;
        window.top.location.href = callUrl;
    }
    __proto.init = function (param, callback) {
        console.log("成都益游初始化：" + JSON.stringify(param));
        var m_this = this;
        m_this.access_token = param.access_token;
        m_this.appId = param.appId;
        m_this.appKey=param.appKey;
        m_this.queryParams = param.queryParams;
        m_this.payKey = param.payKey;
        callback && callback({"result": 0, "desc": "OK"});
    }
    var hexcase = 0;
    var chrsz   = 8;
    function hex_sha1(s){return binb2hex(core_sha1(str2binb(s),s.length * chrsz));}
    function core_sha1(x, len)
    {
        x[len >> 5] |= 0x80 << (24 - len % 32);
        x[((len + 64 >> 9) << 4) + 15] = len;

        var w = Array(80);
        var a = 1732584193;
        var b = -271733879;
        var c = -1732584194;
        var d = 271733878;
        var e = -1009589776;

        for(var i = 0; i < x.length; i += 16)
        {
            var olda = a;
            var oldb = b;
            var oldc = c;
            var oldd = d;
            var olde = e;

            for(var j = 0; j < 80; j++)
            {
                if(j < 16) w[j] = x[i + j];
                else w[j] = rol(w[j-3] ^ w[j-8] ^ w[j-14] ^ w[j-16], 1);
                var t = safe_add(safe_add(rol(a, 5), sha1_ft(j, b, c, d)),
                    safe_add(safe_add(e, w[j]), sha1_kt(j)));
                e = d;
                d = c;
                c = rol(b, 30);
                b = a;
                a = t;
            }

            a = safe_add(a, olda);
            b = safe_add(b, oldb);
            c = safe_add(c, oldc);
            d = safe_add(d, oldd);
            e = safe_add(e, olde);
        }
        return Array(a, b, c, d, e);

    }
    function sha1_ft(t, b, c, d)
    {
        if(t < 20) return (b & c) | ((~b) & d);
        if(t < 40) return b ^ c ^ d;
        if(t < 60) return (b & c) | (b & d) | (c & d);
        return b ^ c ^ d;
    }
    function sha1_kt(t)
    {
        return (t < 20) ? 1518500249 : (t < 40) ? 1859775393 :
            (t < 60) ? -1894007588 : -899497514;
    }
    function safe_add(x, y)
    {
        var lsw = (x & 0xFFFF) + (y & 0xFFFF);
        var msw = (x >> 16) + (y >> 16) + (lsw >> 16);
        return (msw << 16) | (lsw & 0xFFFF);
    }
    function rol(num, cnt)
    {
        return (num << cnt) | (num >>> (32 - cnt));
    }
    function str2binb(str)
    {
        var bin = Array();
        var mask = (1 << chrsz) - 1;
        for(var i = 0; i < str.length * chrsz; i += chrsz)
            bin[i>>5] |= (str.charCodeAt(i / chrsz) & mask) << (32 - chrsz - i%32);
        return bin;
    }
    function binb2hex(binarray)
    {
        var hex_tab = hexcase ? "0123456789ABCDEF" : "0123456789abcdef";
        var str = "";
        for(var i = 0; i < binarray.length * 4; i++)
        {
            str += hex_tab.charAt((binarray[i>>2] >> ((3 - i%4)*8+4)) & 0xF) +
                hex_tab.charAt((binarray[i>>2] >> ((3 - i%4)*8 )) & 0xF);
        }
        return str;
    }
    return SPSdk;
})();